package top.ywlog.static_factory_01;

/**
 * 第一条 用静态工厂代替构造器
 * <p></p>
 * 好处：1. 有名称，能够更正确描述返回值，使得代码更容易阅读
 *      2. 复用对象，每次返回可以是预先创建好的实例、或者缓存创建好的实例；可以保证对象的单例性质。
 *      3. 可以返回原类型的任意子类型
 *      4. 可以根据传入的参数返回不同的对象
 * 坏处：
 *
 * @author: Durian
 * @date: 2021/9/17 21:16
 */
public class ComplexClass implements Complex{

    private static final ComplexClass INSTANCE = new ComplexClass("single", "This is a single object.");

    private String name;
    private String desc;

    private ComplexClass(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    ComplexClass() {
    }

    public static Child createChild() {
        return new Child();
    }

    @Override
    public void printDesc() {
        System.out.println(this.name + ": " + this.desc);
    }

    public static ComplexClass createInstance(String name, String desc) {
        return new ComplexClass(name, desc);
    }

    public static ComplexClass singletonInstance() {
        return INSTANCE;
    }

    public static Complex simpleInstance() {
        return new SimpleDemo();
    }

}
